package com.baoyouqun.domain.Enum;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;

/**
 * 排序类型枚举类
 * 对应查询排序的选项，包含系统标识（存储值）和显示名称
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum DemandSortEnum {

    /**
     * 推荐排序
     * 优先VIP置顶（未过期），再按发布时间倒序
     */
    RECOMMEND("recommend", "推荐排序"),

    /**
     * 最新排序
     * 按发布时间倒序
     */
    NEWEST("newest", "最新发布"),

    /**
     * 点赞最多排序
     * 按点赞数倒序
     */
    LIKE_MOST("likeMost", "点赞最多"),

    /**
     * 收藏最多排序
     * 按收藏数倒序
     */
    COLLECT_MOST("collectMost", "收藏最多");

    /**
     * 系统存储标识（用于前后端交互或参数传递）
     */
    private final String value;

    /**
     * 前端/业务显示名称
     */
    private final String name;

    // 构造方法：初始化标识和名称
    DemandSortEnum(String value, String name) {
        this.value = value;
        this.name = name;
    }

    /**
     * 根据系统存储值匹配枚举
     *
     * @param value 系统中的标识值（如"recommend"）
     * @return 对应的枚举实例
     * @throws IllegalArgumentException 当值不匹配时抛出异常
     */
    public static DemandSortEnum valueOfDbValue(String value) {
        for (DemandSortEnum type : values()) {
            if (type.value.equals(value)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的排序类型标识：" + value);
    }
}
